A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
ngx_waf 是一个方便且高性能的 Nginx 防火墙模块,在编译安装过程中,遇到的一些问题,这里 MARK 一下,方便以后使用备忘。
按官网一步一步进行编译安装,缺失部分参考如下:
需要安装 flex 依赖(Plase run 部分)。
checking for openat(), fstatat() ... found
checking for getaddrinfo() ... found
configuring additional modules
adding module in /Data/tools/ngx_waf
which: no flex in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
./configure: error: the ngx_http_waf_module module requires the flex.
---------------------------------------
Please run:
On Ubuntu or Debian:
apt-get update && apt-get install --yes flex
On CentOS 7:
yum -y install flex
On Centos 8 or Fedora 33 or Fedora 34:
dnf install flex
On Alpine:
apk update && apk add --upgrade flex
On Arch:
1. Enable the core repository on /etc/pacman.conf:
[core]
Include = /etc/pacman.d/mirrorlist
2. Install flex xz package:
pacman -Syu flex
On FreeBSD 12 or FreeBSD 13:
pkg install flex
安装 bison 依赖:
checking for struct dirent.d_type ... found
checking for sysconf(_SC_NPROCESSORS_ONLN) ... found
checking for sysconf(_SC_LEVEL1_DCACHE_LINESIZE) ... found
checking for openat(), fstatat() ... found
checking for getaddrinfo() ... found
configuring additional modules
adding module in /Data/tools/ngx_waf
/usr/bin/flex
which: no bison in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
./configure: error: the ngx_http_waf_module module requires the bison.
---------------------------------------------------------------------------------
Please run:
On Ubuntu or Debian:
apt-get update && apt-get install --yes bison
On CentOS 7:
yum -y install bison
On Centos 8 or Fedora 33 or Fedora 34:
dnf install bison
On Alpine:
apk update && apk add --upgrade bison
On Arch:
1. Enable the core repository on /etc/pacman.conf:
[core]
Include = /etc/pacman.d/mirrorlist
2. Install flex xz package:
pacman -Syu bison
On FreeBSD 12 or FreeBSD 13:
pkg install bison
安装 uthash library 依赖:
checking for openat(), fstatat() ... found
checking for getaddrinfo() ... found
configuring additional modules
adding module in /Data/tools/ngx_waf
/usr/bin/flex
/usr/bin/bison
./configure: error: the ngx_http_waf_module module requires the following command to be run to generate the necessary files.
cd /Data/tools/ngx_waf && make && cd /Data/tools/nginx-1.20.2
---------------------------------------------------------------------------------
configuring additional modules
adding module in /Data/tools/ngx_waf
/usr/bin/flex
/usr/bin/bison
checking for uthash library ... not found
./configure: error: the ngx_http_waf_module module requires the uthash library.
Please run:
cd /usr/local/src \
&& git clone https://github.com/troydhanson/uthash.git \
&& export LIB_UTHASH=/usr/local/src/uthash \
&& cd /Data/tools/nginx-1.20.2
安装 injection library 依赖:
configuring additional modules adding module in /Data/tools/ngx_waf /usr/bin/flex /usr/bin/bison checking for uthash library ... found checking for C99 features ... found checking for injection library ... not found ./configure: error: the ngx_http_waf_module module requires the injection library. --------------------------------------------------------------------------------- Please run cd /Data/tools/ngx_waf && git clone https://github.com/libinjection/libinjection.git inc/libinjection && cd /Data/tools/nginx-1.20.2
安装 sodium library 依赖:
adding module in /Data/tools/ngx_waf
/usr/bin/flex
/usr/bin/bison
checking for uthash library ... found
checking for C99 features ... found
checking for injection library ... found
checking for sodium library ... not found
./configure: error: the ngx_http_waf_module module requires the sodium library.
---------------------------------------------------------------------------------
Please run:
On Ubuntu or Debian:
apt-get update && apt-get install --yes libsodium23 libsodium-dev
On Alpine:
apk update && apk add libsodium libsodium-dev
On other OS:
# You can remove directories libsodium-src and libsodium after installing the ngx_http_waf_module.
git clone https://github.com/jedisct1/libsodium.git --branch stable libsodium-src \
&& cd libsodium-src \
&& ./configure --prefix=/Data/tools/nginx-1.20.2/libsodium --with-pic \
&& make -j$(nproc) && make check -j $(nproc) && make install \
&& export LIB_SODIUM=/Data/tools/nginx-1.20.2/libsodium \
&& cd /Data/tools/nginx-1.20.2
上述依赖都 OK 后,Configuration 最终成功如下:
configuring additional modules adding module in /Data/tools/ngx_waf /usr/bin/flex /usr/bin/bison checking for uthash library ... found checking for C99 features ... found checking for injection library ... found checking for sodium library ... found + ngx_http_waf_module was configured checking for PCRE library ... found checking for PCRE JIT support ... found checking for OpenSSL library ... found checking for zlib library ... found creating objs/Makefile --------------------------------------------------------------------------------- Configuration summary + using system PCRE library + using system OpenSSL library + using system zlib library
注意 nginx 的编译参数 --with-cc-opt=-std=gnu99:
./configure --prefix=/Data/apps/nginx-1.20.2 --with-http_stub_status_module --with-pcre --with-http_ssl_module --with-http_realip_module --with-pcre --with-cc-opt='-std=gnu99' --add-module=/Data/tools/ngx_waf
以及接下来应该运行配置脚本:
sed -i 's/^\(CFLAGS.*\)/\1 -fstack-protector-strong -Wno-sign-compare/' objs/Makefile
接着您开始编译 ngxin 了
# 不使用并行编译 make # 使用并行编译 make -j$(nproc)
测试 ngx_waf 验证是否生效:
curl -I -o /dev/null --user-agent zmeu -s -w "%{http_code}\\n" https://localhost/test
部分配置参考,更多详见官网:
waf on; waf_rule_path /path/ngx_waf/assets/rules/; waf_mode STD; waf_cc_deny rate=1000r/m duration=60m; waf_cache capacity=5000;